All About Session and Session Cookie in Depth
सेशन स्टेट मैनेजमेंट एक ऐसी तकनीक है जिसका उपयोग यूज़र के डेटा को कुछ समय के लिए सर्वर पर स्टोर करके रखने के लिए किया जाता है, ताकि सर्वर यूज़र की पहचान बनाए रख सके।
जैसा कि हम जानते हैं कि एचटीटीपी(HyperText Transfer Protocol) एक स्टेटलेस प्रोटोकॉल है तो प्रत्येक रिक्वेस्ट के बाद यूजर का इनफॉरमेशन नष्ट हो जाता है और सर्वर के पास यूजर का कोई स्थायी इनफॉरमेशन संचित नहीं होता है।
यदि यूजर के इनफॉरमेशन को सर्वर को कुछ समय के लिए संचित करके रखना हो तो इसके लिए सर्वर स्टेट मैनेजमेंट की तकनीक का उपयोग करता है। इससे यूज़र की पहचान (identity) लगातार बनी रहती है। इसके अंतर्गत यूजर के इनफार्मेशन को की वैल्यू युग्म के रूप में सर्वर के मेमोरी के भीतर या किसी डाटाबेस के भीतर संचित करके रखा जाता है। चूँकि यूजर का इनफॉरमेशन सर्वर पर संचित किया जाता है अतः डाटा सुरक्षित रहता है लेकिन स्टेट मैनेजमेंट के लिए इतना ही पर्याप्त नहीं है।
यूजर के इनफॉरमेशन को सर्वर साइड संचित करने के साथ-साथ यूजर से संबंधित एक सेशन आईडी जनरेट किया जाता है जिसे यूजर के पास कुकी के रूप में भेज दिया जाता है। यह सेशन आईडी सर्वर पर भी संचित करके रखा जाता है। जब कुकी को यूजर के पास भेजा जाता है तो उसमें सेशन आईडी के अलावा कुछ अन्य सेशन से संबंधित डाटा भी भेज दिया जाता है जैसे कुकी/सेशन का जीवनकाल, कुकी को जावास्क्रिप्ट के द्वारा नहीं एक्सेस किया जाए इसके लिए HttpOnly Flag (ताकि JavaScript से एक्सेस न हो सके) इत्यादि। ऐसा करने से सेशन कुकी सुरक्षित हो जाती है।
ध्यान दीजिए कि कुकी में सेशन आईडी को एन्क्रिप्ट नहीं किया जाता है इसके विपरीत उन्नत रेण्डम नम्बर उत्पन्न करने की तकनीक(cryptographically strong random number generator) का उपयोग करके सेशन आईडी जनरेट किया जाता है ताकि इसका अनुमान लगाना (guess करना) लगभग असंभव हो।
निष्कर्ष
- HTTP की stateless प्रकृति को संभालने के लिए सेशन स्टेट मैनेजमेंट आवश्यक है
- यूज़र डेटा सर्वर पर सुरक्षित रखा जाता है
- Session ID के माध्यम से यूज़र की पहचान बनाए रखी जाती है
- कुकी और सुरक्षा सेटिंग्स इस पूरी प्रक्रिया को सुरक्षित बनाती हैं
सेशन कुकी के भीतर सेशन का डाटा संचित किया जाता है या नहीं?
सेशन कुकी के भीतर सेशन के सेशन आईडी को संचित रखना पर्याप्त है क्योंकि जब यह आईडी सर्वर को प्राप्त होता है तो यह सेशन से सम्बंधित डेटा का मेमोरी से निकाल कर काम कर सकता है। आइए इसे विस्तार से समझते हैं:
- सामान्यतः Session Cookie के अंदर पूरा सेशन डेटा स्टोर नहीं किया जाता।
- सेशन कुकी के भीतर केवल एक Session ID (सेशन पहचानकर्ता) रखा जाता है।
फिर सेशन डेटा कहाँ रहता है?
सेशन से जुड़ा वास्तविक डेटा सर्वर साइड पर स्टोर होता है, जैसे:
- Server memory (In-Memory)
- Distributed cache (Redis, SQL Server आदि)
- Database
Session ID की भूमिका क्या है?
जब ब्राउज़र सर्वर को रिक्वेस्ट भेजता है, तो वह सेशन कुकी के माध्यम से Session ID भी भेजता है। सर्वर इस ID का उपयोग करके:
1. अपने स्टोरेज (memory/cache/db) में संबंधित सेशन को ढूँढता है
2. उससे जुड़ा डेटा निकालता है
3. उसी डेटा के आधार पर रिक्वेस्ट को प्रोसेस करता है
इसलिए यह कथन बिल्कुल सही है कि:
“Session ID को कुकी में रखना पर्याप्त है, क्योंकि सर्वर उसी ID से पूरा सेशन डेटा प्राप्त कर सकता है।”
ऐसा डिज़ाइन क्यों किया गया है?
इसके पीछे कुछ महत्वपूर्ण कारण हैं:
1. Security (सुरक्षा)
अगर पूरा डेटा कुकी में रखा जाए:
- यूज़र उसे देख या बदल सकता है
- Sensitive data (जैसे user info) leak हो सकता है
- कुकी का आकार सीमित होता है (~4KB)
- बड़े डेटा को कुकी में रखना संभव नहीं
- सर्वर साइड स्टोरेज अधिक नियंत्रित और तेज़ हो सकता है
- Data expiration और management आसान होता है
निष्कर्ष
सेशन कुकी के भीतर पूरा सेशन डेटा संग्रहीत नहीं किया जाता, बल्कि केवल एक Session ID रखा जाता है। यह Session ID सर्वर को प्राप्त होने पर, सर्वर उससे संबंधित सेशन डेटा को अपने स्टोरेज (जैसे मेमोरी या डेटाबेस) से प्राप्त कर लेता है। इसलिए कुकी में केवल Session ID रखना ही पर्याप्त और सुरक्षित माना जाता है।
क्या सेशन आईडी की सुरक्षा के लिए उसको एन्क्रिप्ट करने के पश्चात सेशन कुकी के भीतर संचित किया जाता है?
सामान्यतः Session ID को “encrypt” नहीं किया जाता बल्कि Session ID एक random, unpredictable string होता है। इसे इस तरह generate किया जाता है कि कोई attacker इसका अनुमान न लगा सके।
फिर सुरक्षा कैसे सुनिश्चित की जाती है?
Session ID की सुरक्षा कई तरीकों से होती है:
1. Randomness (अनुमान न लगाया जा सके)
- Session ID cryptographically strong random generator से बनता है
- Example: a8f5f167f44f4964e6c998dee827110c
2. Cookie Security Flags
Session cookie पर ये flags लगाए जाते हैं:
- HttpOnly → JavaScript access नहीं कर सकता (XSS protection)
- Secure → केवल HTTPS पर भेजी जाएगी
- SameSite → CSRF attacks को कम करता है
- Session ID की lifetime सीमित होती है
- Idle timeout / absolute expiration लागू होता है
- Login के बाद नया Session ID generate किया जाता है
- इससे Session Fixation Attack रोका जाता है
क्या कभी encryption उपयोग होता है?
कुछ frameworks (जैसे ASP.NET Core) में:Cookie को encrypt + sign किया जा सकता है लेकिन ध्यान दें यहाँ encryption पूरे cookie payload पर होता है सिर्फ Session ID पर नहीं, कुछ frameworks में पूरी कुकी को encrypt किया जा सकता है, परंतु यह आवश्यक नहीं कि केवल Session ID को अलग से encrypt किया जाए।
सेशन कुकी के मेटा इन्फॉर्मेशन (जैसे कुकी का जीवन काल) सर्वर पर संचित किया जाता है या कुकी के भीतर ही?
सीधा उत्तर है: कुकी का मेटा-इन्फॉर्मेशन (जैसे lifetime, expiry, domain, path आदि) कुकी के भीतर ही संग्रहीत होता है, सर्वर पर नहीं। अब इसे स्पष्ट रूप से समझते हैं। जब सर्वर ब्राउज़र को कुकी भेजता है, तो वह HTTP response header में कुछ इस प्रकार होती है:
Set-Cookie: SessionId=abc123; Expires=Wed, 10 Apr 2026 10:00:00 GMT; HttpOnly; Secure; SameSite=Strict
यहाँ ध्यान दें:
- SessionId=abc123 → actual data (Session ID)
- बाकी सब (Expires, HttpOnly, Secure, SameSite) → meta information
फिर expiry कैसे काम करती है?
यह पूरी तरह ब्राउज़र की जिम्मेदारी है:
- जैसे ही कुकी expire होती है
- ब्राउज़र उसे delete कर देता है
- और अगली request में उसे सर्वर को भेजता ही नहीं
Session Cookie vs Persistent Cookie
1. Session Cookie
- Expires या Max-Age नहीं होता
- ब्राउज़र बंद होते ही delete हो जाती है
- Expires या Max-Age सेट होता है
- तय समय तक रहती है
महत्वपूर्ण बात (Advanced Insight)
हालांकि कुकी का expiry client-side होता है, फिर भी: कई frameworks (जैसे ASP.NET Core) server-side पर भी session timeout रखते हैं
इसका मतलब:
- कुकी valid हो सकती है
- लेकिन server पर session expire हो चुका हो
अगले पोस्ट में हम इन सब बातो को प्रैक्टिकल रूप में ASP.NET Core के भीतर सेशन कुकी बना कर समझेंगे
.jpg)
टिप्पणियाँ
एक टिप्पणी भेजें